#include "../source/server.hpp"
#include <signal.h>

/*3、给服务器发送一个数据，告诉服务器接收1025个， 但是发送不够1024. 数据之发送一次， 服务器得不到完整请求，
就不会进行业务处理， 客户端就得不到响应， 最终超时关闭连接。*/
// int main()
// {
//     signal(SIGCHLD, SIG_IGN);
//     for (int i = 0; i < 10; i++)
//     {
//         pid_t id = fork();
//         if (id < 0)
//         {
//             DBG_LOG("create son process error");
//             return -1;
//         }
//         else if (id == 0)
//         {
//             Socket cli_sock;
//             cli_sock.CreateClient(8080, "127.0.0.1");
//             std::string req = "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
//             while (1)
//             {
//                 assert(cli_sock.Send((char *)req.c_str(), req.size()) != -1);

//                 char buf[1024] = {0};
//                 assert(cli_sock.Read(buf, 1023));
//                 DBG_LOG("[%s]", buf);
//                 sleep(1);
//             }
//             cli_sock.Close();
//         }
//     }
//     return 0;
// }

/*一次性发送多条正常请求*/
// int main()
// {
//     Socket cli_sock;
//     cli_sock.CreateClient(8080, "127.0.0.1");
//     std::string req = "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
//     req += "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
//     req += "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";

//     while (1)
//     {
//         assert(cli_sock.Send((char *)req.c_str(), req.size()) != -1);

//         char buf[1024] = {0};
//         assert(cli_sock.Read(buf, 1023));
//         DBG_LOG("[%s]", buf);
//         sleep(1);
//     }

//     cli_sock.Close();
//     return 0;
// }

/*性能压力测试：
    并发量：可以同时处理多少个客户端的请求而不会出现连接失败
    QPS：每秒钟处理的包的数量
    借助WebBench， 创建大量进程， 创建客户端连接服务器， 发送请求，收到响应后关闭连接， 开始下一个连接的
    建立。抛开环境说性能测试都是无知的。

    测试环境：
        服务器1核2G服务器，带宽1M的云服务器。
        客户端是云服务器， 使用WebBench， 以2000并发量向服务器发送请求， 进行了24小时/60s测试。   
        最终得到的结果是：速度为77830个请求每分钟， 即QPM， QPS就是77830 / 60。
        每秒发送243876个字节
*/


#include "http.hpp"

int main()
{
    Socket cli_sock;
    cli_sock.CreateClient(8080, "127.0.0.1");
    std::string req = "PUT /1234.txt HTTP/1.1\r\nConnection: keep-alive\r\n";
    std::string body;
    Util::ReadFile("./large_file", &body);
    req += "Content-Length: " + std::to_string(body.size()) + "\r\n\r\n";
    req += body;
    DBG_LOG("%d", body.size());
    while (1)
    {
        assert(cli_sock.Send((char *)req.c_str(), req.size()) != -1);

        char buf[1024] = {0};
        assert(cli_sock.Read(buf, 1023));
        DBG_LOG("[%s]", buf);
        sleep(1);
    }

    cli_sock.Close();
    return 0;
}
